package com.obligatorio.domain;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;

@Entity
@NamedQueries({
		@NamedQuery(name = "findAllContactsUser", query = "SELECT c FROM Contactos c WHERE c.usuarioSolicitante =:Usuario AND c.estado=:STATUS"),
		@NamedQuery(name = "findContact", query = "SELECT c FROM Contactos c WHERE c.code =:CODIGO AND c.usuarioInvitado =:Usuario AND c.estado =:STATUS") })
public class Contactos implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "InvitadoId")
	private Integer id;

	@ManyToOne
	private Usuario usuarioSolicitante;

	@ManyToOne
	private Usuario usuarioInvitado;

	@Column(name = "InvitadoEstado", nullable = false)
	private Estados estado;

	@Column(name = "InvitadoCode", nullable = false)
	private String code;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Usuario getUsuarioSolicitante() {
		return usuarioSolicitante;
	}

	public void setUsuarioSolicitante(Usuario usuarioSolicitante) {
		this.usuarioSolicitante = usuarioSolicitante;
	}

	public Usuario getUsuarioInvitado() {
		return usuarioInvitado;
	}

	public void setUsuarioInvitado(Usuario usuarioInvitado) {
		this.usuarioInvitado = usuarioInvitado;
	}

	public Estados getEstado() {
		return estado;
	}

	public void setEstado(Estados estado) {
		this.estado = estado;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public Contactos(Integer id, Usuario usuarioSolicitante,
			Usuario usuarioInvitado, Estados estado, String code) {
		this.id = id;
		this.usuarioSolicitante = usuarioSolicitante;
		this.usuarioInvitado = usuarioInvitado;
		this.estado = estado;
		this.code = code;
	}

	public Contactos(Usuario usuarioSolicitante, Usuario usuarioInvitado,
			Estados estado, String code) {
		this.usuarioSolicitante = usuarioSolicitante;
		this.usuarioInvitado = usuarioInvitado;
		this.estado = estado;
		this.code = code;
	}

	public Contactos() {
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime
				* result
				+ ((usuarioSolicitante == null) ? 0 : usuarioSolicitante
						.hashCode());
		result = prime * result
				+ ((usuarioInvitado == null) ? 0 : usuarioInvitado.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Contactos other = (Contactos) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (usuarioSolicitante == null) {
			if (other.usuarioSolicitante != null)
				return false;
		} else if (!usuarioSolicitante.equals(other.usuarioSolicitante))
			return false;
		if (usuarioInvitado == null) {
			if (other.usuarioInvitado != null)
				return false;
		} else if (!usuarioInvitado.equals(other.usuarioInvitado))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Invitado [getUsuarioSolicitante()=" + getUsuarioSolicitante()
				+ ", getUsuarioInvitado()=" + getUsuarioInvitado()
				+ ", getEstado()=" + getEstado() + "]";
	}

}
